import router from '@/router'
import Layout from '@/components/Layout'

// 处理动态路由
export function generateRoutes(menus) {
    const routes = []

    menus.forEach(menu => {
         // 如果没有路径，使用name作为路径
        const path = menu.path || `/`

        // 处理组件
        let component = Layout
        if (menu.component) {
            // 如果是布局组件
            if (menu.component === 'Layout') {
                component = Layout
            } else {
                // 其他组件使用懒加载
                component = loadView(menu.component)
            }
        }

        const route = {
            path: path,
            name: menu.name,
            component: component,
            meta: {
                title: menu.name,
                icon: menu.icon
            }
        }

        if (menu.children && menu.children.length) {
            // 如果是布局组件，需要设置子路由
            if (!menu.component) {
                route.redirect = menu.redirect || menu.children[0].path
                route.children = generateRoutes(menu.children)
            } else {
                // 如果不是布局组件，将子菜单作为独立路由
                routes.push(...generateRoutes(menu.children))
            }
        }

        routes.push(route)
    })

    return routes
}

// 路由懒加载
export const loadView = (view) => {
    if (!view) {
        return () => import('@/views/404.vue')
    }

    // 处理组件路径
    const formatComponentPath = (path) => {
        // 移除开头的 '/'
        path = path.replace(/^\//, '')
        // 确保第一个字母大写（因为我们看到实际文件名是大写的）
        const parts = path.split('/')
        const fileName = parts.pop()
        const firstChar = fileName.charAt(0).toUpperCase()
        const restChars = fileName.slice(1)
        parts.push(firstChar + restChars)
        return parts.join('/')
    }

    try {
        const formattedView = formatComponentPath(view)
        console.log('Loading component path:', formattedView)

        // 使用动态导入
        return () => {
            if (formattedView.includes('/')) {
                // 如果是子目录中的组件
                return import(`@/views/${formattedView}.vue`)
            } else {
                // 如果是根目录下的组件
                return import(`@/views/${formattedView}.vue`)
            }
        }
    } catch (error) {
        console.error(`Could not load view: ${view}`, error)
        return () => import('@/views/404.vue')
    }
}

// 添加动态路由
export function addRoutes(routes) {
    // 添加404路由
    routes.push({path: '*', redirect: '/404', hidden: true})
    router.addRoutes(routes)
}
